package com.bjx.system.service;


import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bjx.api.system.domain.vo.UserRoleVO;
import com.bjx.api.system.domain.vo.UserVO;
import com.bjx.api.system.domain.query.UserQuery;
import com.bjx.system.domain.vo.UpdatePasswordVO;
import com.bjx.common.security.domain.UserPostVO;

import java.util.List;

public interface IUserService {
    /**
     * 新增用户
     * @param userVO
     * @Author: liushuai
     * @Date: 2022/6/25 11:38
     */
    void insertUser(UserVO userVO);

    /**
     * 根据登录用户名获取用户信息
     * @param username
     * @return: com.bjx.system.domain.vo.UserVO
     * @Author: liushuai
     * @Date: 2022/6/27 15:33
     */
    UserVO selectUserInfoByUsername(String username);

    /**
     * 根据用户id获取用户信息
     * @param userId
     * @return: com.bjx.api.system.domain.vo.UserVO
     * @Author: liushuai
     * @Date: 2022/6/28 10:27
     */
    UserVO selectUserInfoByUserId(Long userId);

    /**
     * 修改用户
     * @param userVO
     * @Author: liushuai
     * @Date: 2022/7/4 20:52
     */
    void updateUser(UserVO userVO);

    /**
     * 根据用户Id删除用户
     * @param userId
     * @Author: liushuai
     * @Date: 2022/7/6 17:05
     */
    void deleteUserByUserId(Long userId);

    /**
     * 根据组织机构ID查询用户列表
     * @param orgId
     * @return: java.util.List<com.bjx.api.system.domain.vo.UserVO>
     * @Author: liushuai
     * @Date: 2022/7/6 17:11
     */
    List<UserVO> listUserInfoByOrgId(Long orgId);

    /**
     * 修改密码成功
     * @param updatePasswordVO
     * @Author: liushuai
     * @Date: 2022/7/15 15:21
     */
    void updatePassword(UpdatePasswordVO updatePasswordVO);

    /**
     * 分页查询组织机构
     * @param userQuery
     * @return: com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.bjx.api.system.domain.vo.UserVO>
     * @Author: liushuai
     * @Date: 2022/10/8 21:47
     */
    Page<UserVO> listUserPage(UserQuery userQuery);

    /**
     * 保存用户职位关联
     * @param userVO
     * @Author: liushuai
     * @Date: 2022/10/16 14:18
     */
    void saveUserPost(UserVO userVO);

    /**
     * 根据用户id查询所关联的职位
     * @param userId
     * @return: com.bjx.common.core.domain.R
     * @Author: liushuai
     * @Date: 2022/10/16 14:52
     */
    List<UserPostVO> listUserPost(Long userId);
    /**
     * 保存用户角色关联
     * @param userVO
     * @return: com.bjx.common.core.domain.R
     * @Author: liushuai
     * @Date: 2022/10/17 17:05
     */
    void saveUserRole(UserVO userVO);

    /**
     * 根据用户id查询所关联的角色
     * @param userId
     * @return: java.util.List<com.bjx.api.system.domain.vo.UserRoleVO>
     * @Author: liushuai
     * @Date: 2022/10/17 17:06
     */
    List<UserRoleVO> listUserRoleByUserId(Long userId);

    /**
     * 根据组织机构查询当前组织机构及以下人员树
     * @param orgId
     * @return: java.util.List<cn.hutool.core.lang.tree.Tree<java.lang.Long>>
     * @Author: liushuai
     * @Date: 2022/10/20 16:13
     */
    List<Tree<String>> listUserTreeByOrgId(Long orgId);

    /**
     * 根据用户id列表查询用户信息列表
     * @param userQuery
     * @return: com.bjx.common.core.domain.R<java.util.List<com.bjx.api.system.domain.vo.UserVO>>
     * @Author: liushuai
     * @Date: 2022/11/18 20:10
     */
    List<UserVO> listUserVOByIds(UserQuery userQuery);
    /**
     * 根据用户id列表查询用户信息列表
     * @param userQuery
     * @return: com.bjx.common.core.domain.R<java.util.List<com.bjx.api.system.domain.vo.UserVO>>
     * @Author: liushuai
     * @Date: 2022/11/18 20:10
     */
    List<UserVO> listUserVOByOrgAndPosts(UserQuery userQuery);


    /**
     * 根据角色id列表查询用户信息
     * @param userQuery
     * @return: com.bjx.common.core.domain.R<java.util.List<com.bjx.api.system.domain.vo.UserVO>>
     * @Author: liushuai
     * @Date: 2022/12/2 15:37
     */
    List<UserVO> listUserVOByRoleIds(UserQuery userQuery);


    /**
     * 根据职位id列表查询用户信息
     * @param userQuery
     * @return: com.bjx.common.core.domain.R<java.util.List<com.bjx.api.system.domain.vo.UserVO>>
     * @Author: liushuai
     * @Date: 2022/12/2 15:59
     */
    List<UserVO> listUserVOByPostIds(UserQuery userQuery);
    /**
     * 根据组织机构id和角色id列表查询用户列表
     * @param userQuery
     * @return: com.bjx.common.core.domain.R<java.util.List<com.bjx.api.system.domain.vo.UserVO>>
     * @Author: liushuai
     * @Date: 2022/12/5 17:34
     */
    List<UserVO> listUserVOByOrgAndRoleIds(UserQuery userQuery);
    /**
     * 根据公司id和角色id列表
     * @param userQuery
     * @return: com.bjx.common.core.domain.R<java.util.List<com.bjx.api.system.domain.vo.UserVO>>
     * @Author: liushuai
     * @Date: 2022/12/5 19:29
     */
    List<UserVO> listUserVOByComAndRoleIds(UserQuery userQuery);

    /**
     * 根据公司名称和职位列表查询用户列表
     * @param userQuery
     * @return: com.bjx.common.core.domain.R<java.util.List<com.bjx.api.system.domain.vo.UserVO>>
     * @Author: liushuai
     * @Date: 2022/12/1 11:38
     */
    List<UserVO> listUserVOByComAndPosts(UserQuery userQuery);
}
